package com.ysd.lis.service.eq.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ysd.common.Result;
import com.ysd.lis.entity.SysOrgDepartment;
import com.ysd.lis.entity.SysOrganization;
import com.ysd.lis.entity.eq.EqEquiptType;
import com.ysd.lis.mapper.eq.EqEquiptTypeMapper;
import com.ysd.lis.request.CommonPageDto;
import com.ysd.lis.request.eq.EquiptTypeDto;
import com.ysd.lis.service.eq.EqEquiptTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备管理-设备类型 服务实现类
 * </p>
 *
 * @author prs
 * @since 2024-07-31
 */
@Service
public class EqEquiptTypeServiceImpl extends ServiceImpl<EqEquiptTypeMapper, EqEquiptType> implements EqEquiptTypeService {

    @Autowired
    EqEquiptTypeMapper eqEquiptTypeMapper;
    @Override
    public Result findEquiptTypeList(CommonPageDto param) {

        LambdaQueryWrapper<EqEquiptType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(EqEquiptType::getDelFlag, 0);

        if (StringUtils.isNotBlank(param.getSeachValue())) {
            lambdaQueryWrapper.and(wrapper -> wrapper.like(EqEquiptType::getEquiptTypeName, param.getSeachValue()).or().like(EqEquiptType::getEquiptTypeCode, param.getSeachValue()));
        }
        lambdaQueryWrapper.orderByAsc(EqEquiptType::getSeq);
        List<EqEquiptType> eqEquiptTypes = eqEquiptTypeMapper.selectList(lambdaQueryWrapper);
        return Result.succ(1, "查询成功", eqEquiptTypes);
    }

    @Override
    public Result findEquiptTypeTreeList(CommonPageDto param) {
        LambdaQueryWrapper<EqEquiptType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(EqEquiptType::getDelFlag, 0);

        if (StringUtils.isNotBlank(param.getSeachValue())) {
            lambdaQueryWrapper.and(wrapper -> wrapper.like(EqEquiptType::getEquiptTypeName, param.getSeachValue()).or().like(EqEquiptType::getEquiptTypeCode, param.getSeachValue()));
        }
        lambdaQueryWrapper.orderByAsc(EqEquiptType::getParentId);
        List<EqEquiptType> eqEquiptTypes = eqEquiptTypeMapper.selectList(lambdaQueryWrapper);

        List<Map> mapList = new ArrayList<>();

        for (EqEquiptType eqEquiptType : eqEquiptTypes) {
            String parentId = eqEquiptType.getParentId();
            if (StringUtils.isBlank(parentId)) {
                Map<Object, Object> map = new HashMap<>();
                map.put("id", eqEquiptType.getId());
                map.put("code", eqEquiptType.getEquiptTypeCode());
                map.put("name", eqEquiptType.getEquiptTypeName());
                map.put("parentId", eqEquiptType.getParentId());
                mapList.add(map);
            }
        }
        for (Map map : mapList) {
            List<Map> child = getChild(map, eqEquiptTypes);
            map.put("children", child);
        }
        return Result.succ(1, "查询成功", mapList);
    }
    private List<Map> getChild(Map m, List<EqEquiptType> eqEquiptTypes) {
        List<Map> result = new ArrayList();
        for (EqEquiptType eqEquiptType : eqEquiptTypes) {
            if (StringUtils.isNotBlank(eqEquiptType.getParentId()) && eqEquiptType.getParentId().equals(m.get("id"))) {
                Map<Object, Object> map = new HashMap<>();
                map.put("id", eqEquiptType.getId());
                map.put("code", eqEquiptType.getEquiptTypeCode());
                map.put("name", eqEquiptType.getEquiptTypeName());
                map.put("parentId", eqEquiptType.getParentId());
                result.add(map);
            }
        }

        for (Map ma : result) {
            ma.put("children", getChild(ma, eqEquiptTypes));
        }
        if (result.size() == 0) {
            return null;
        }
        return result;
    }


    @Override
    public Result saveOrUpdateEquiptType(EquiptTypeDto dto) {
        List<EqEquiptType> equiptTypeList = dto.getEquiptTypeList();
        boolean b = this.saveOrUpdateBatch(equiptTypeList);
        if (b) {
            return Result.succ(1, "成功", null);
        } else {
            return Result.fail(400, "失败", "");
        }
    }

    @Override
    public Result deleteEquiptType(EqEquiptType eqEquiptType) {
        int deleteById = eqEquiptTypeMapper.deleteById(eqEquiptType.getId());
        if(deleteById>0){
            return Result.succ(1, "删除成功", "");
        }else {
            return Result.fail(400, "删除失败", "");
        }
    }
}
